package pe.gob.foncodes.spp.bs.dao;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.gob.foncodes.sgp.bs.commons.Constant;
import pe.gob.foncodes.spp.bs.domain.Focalizacion;

@Repository
public class FocalizacionDAOImpl extends BaseDAO<Focalizacion> implements
		FocalizacionDAO {

	@Autowired
	public FocalizacionDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);

	}

	public List<Focalizacion> buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(String codAnho,
			String codZonal, String codDepartamento, String codProvincia,
			String codDistrito) {

		Focalizacion focalizacion;
		List<Focalizacion> focalizaciones = new ArrayList<Focalizacion>();
		StringBuilder queryString = new StringBuilder();
		queryString.append(" ");

		queryString.append(" SELECT A.COD_ANHO,A.COD_ZONAL,A.TXT_ZONAL, ");
		queryString.append(" A.COD_DEPARTAMENTO,A.TXT_DEPARTAMENTO, ");
		queryString.append(" A.COD_PROVINCIA,A.TXT_PROVINCIA, ");
		queryString.append(" A.COD_DISTRITO,A.TXT_DISTRITO, ");
		queryString.append(" A.COD_CENTRO_POBLADO, A.TXT_CENTRO_POBLADO ,A.NID_SUB_TIPO_PROYECTO ");
		queryString.append(" FROM ");
		queryString.append(Constant.ESQUEMA + ".FOCALIZACION_VIEW A ");
		
		queryString.append(" WHERE A.COD_ANHO = '" + codAnho + "'");
		
		if (codZonal != null && !"".equals(codZonal)){
			queryString.append(" AND A.COD_ZONAL = '" + codZonal + "'");
		}
		
		if (codDepartamento != null && !"".equals(codDepartamento)){
			queryString.append(" AND A.COD_DEPARTAMENTO = '" + codDepartamento + "'");
		}
		
		if (codProvincia != null && !"".equals(codProvincia)){
			queryString.append(" AND A.COD_PROVINCIA = '" + codProvincia + "'");
		}
		
		if (codDistrito != null && !"".equals(codDistrito)){
			queryString.append(" AND A.COD_DISTRITO = '" + codDistrito + "'");
		}
		queryString.append( "MINUS ");
		
		queryString.append(" SELECT B.COD_ANHO,B.COD_ZONAL,B.TXT_ZONAL, ");
		queryString.append(" B.COD_DEPARTAMENTO,B.TXT_DEPARTAMENTO, ");
		queryString.append(" B.COD_PROVINCIA,B.TXT_PROVINCIA, ");
		queryString.append(" B.COD_DISTRITO,B.TXT_DISTRITO, ");
		queryString.append(" B.COD_CENTRO_POBLADO, B.TXT_CENTRO_POBLADO ,B.NID_SUB_TIPO_PROYECTO ");
		queryString.append(" FROM ");
		queryString.append(Constant.ESQUEMA + ".PORTAFOLIO_FOCALIZACION_VIEW B ");
		
		queryString.append(" WHERE B.COD_ANHO = '" + codAnho + "'");
		
		if (codZonal != null && !"".equals(codZonal)){
			queryString.append(" AND B.COD_ZONAL = '" + codZonal + "'");
		}
		
		if (codDepartamento != null && !"".equals(codDepartamento)){
			queryString.append(" AND B.COD_DEPARTAMENTO = '" + codDepartamento + "'");
		}
		
		if (codProvincia != null && !"".equals(codProvincia)){
			queryString.append(" AND B.COD_PROVINCIA = '" + codProvincia + "'");
		}
		
		if (codDistrito != null && !"".equals(codDistrito)){
			queryString.append(" AND B.COD_DISTRITO = '" + codDistrito + "'");
		}
		
		List<Object> lista = findByNativeQuery(queryString);
		Object[] aux;
		for (Object object : lista) {
			aux = (Object[]) object;
			focalizacion = new Focalizacion((String) aux[0], (String) aux[1],
					(String) aux[2], (String) aux[3], (String) aux[4],
					(String) aux[5], (String) aux[6], (String) aux[7],
					(String) aux[8], (String) aux[9], (String) aux[10],
					(BigDecimal) aux[11]);
			focalizaciones.add(focalizacion);
		}

		return focalizaciones;
	}

}
